Exploratory data analysis of Lebanon conflict trends
Author
Sean Ng, Risk Anticipation Hub
Published
September 19, 2024
Introduction
This document is a primer on recent conflict and macroeconomic trends in Lebanon, making use of the Armed Conflict Location and Event Data (ACLED). It seeks to provide an overview of political violence in Lebanon and is intended to be read together with other supporting documents (e.g. on demographics, civil society) when scenario planning for Lebanon.
ACLED’s data collection in Lebanon began on 1 January 2016. This report contains data up to 13 September 2024. The most recent violence – the 2024 Lebanon pager explosions – has yet to be reflected in the ACLED dataset. UCDP might have more years of data (though fewer recorded events): that dataset will be evaluated later; there is also a comparison of ACLED and UCDP here.
The gif below shows a month-by-month progression of political conflict and violence in Lebanon, Israel, Palestine, Jordan and Syria from January 2023 to the present day. For at least the past two years, Lebanon seems far more influenced by the conflict in Palestine and Israel than the conflict in Syria – there is hardly any cross-border violence and Lebanon largely borders Assad-held areas, though there are many Syrian conflict actors operating within Lebanon.
However, the southern border of Lebanon with Israel has become a conflict hotspot, in the aftermath of October 7 2023. Here’s a brief review of the political conflict and violence recorded by ACLED.
ACLED, (2024). Armed Conflict Location & Event Data for Lebanon, Syria, Israel, Palestine & Jordan (2016-01-01 to 2024-09-13). https://acleddata.com
Raleigh, C., Kishi, R. & Linke, A. Political instability patterns are obscured by conflict dataset scope conditions, sources, and coding choices. Humanit Soc Sci Commun 10,74 (2023). https://doi.org/10.1057/s41599-023-01559-4
Runfola, D. et al. (2020) geoBoundaries: A global database of political administrative boundaries. PLoS ONE 15(4): e0231866. https://doi.org/10.1371/journal.pone.0231866
Silge J, Robinson D (2016). tidytext: Text Mining and Analysis Using Tidy Data Principles in R. JOSS, 1(3). doi: 10.21105/joss.00037, http://dx.doi.org/10.21105/joss.00037
World Food Programme (2024). Global food prices. Extracted from https://data.humdata.org/m/dataset/global-wfp-food-prices? on 22 September 2024.
World Food Programme (2019). World administrative boundaries – countries and territories. Extracted from https://public.opendatasoft.com/explore/dataset/world-administrative-boundaries/information/ on 11 June 2024.
Event types and fatalities
The charts below are streamgraphs, where values over time—in the case below, quarterly conflict events between 2016 and 2024—are represented by the area. Though negative values are shown, the Y-axis values are absolute; however, using a streamgraph, as opposed to an area graph, makes spikes in violence (from elections, for instance) much more visible.
From the chart below, sorted in order of number of events from political incidents per quarter, it seems that Lebanon is stuck in Israel and Palestine’s orbit, with each experiencing an upswing in violence in 2023, before the 7 October attacks. Prior to this, Lebanon had been in a period of stabilisation since 2019 and the overthrow of their then government. However, the current flavour of violence in Lebanon is very different from the October 17 revolution in 2019, looking more like a country at war.
The streamgraphs below break down fatalities by event type.
Violence in Syria has plateaued since 2018, though Syrian-linked actors are still present and active in Lebanon. In terms of fatalities from political incidents, Lebanon has been relatively quiet since the 2017 Hezbollah-Syrian Arab Army offensive against ISIL. Note that despite toppling their government in 2019, there was barely an uptick in conflict fatalities despite a large number of riots and protests.
Since 7 October 2023, Iran and Jordan have seen less pressure on their governments. The Iranian government has been under tremendous pressure, fending off mass protests and civil disobedience movements every year.
There was an escalation in tensions between Lebanon and Israel in 2023, before the October 7 attacks. But the pattern of violence in Lebanon has profoundly changed, especially when compared to before October 7, 2023.
As the plot below shows, Lebanon had previously been more widely plagued by Syrian-linked militias. Still, as mentioned, it seems to be much more heavily involved in the Israel-Palestine conflict.
Actors
Below is a plot of the “deadliest” actors in Lebanon and amongst its neighbours (sorted in order of their mean annual fatalities). The actors plotted below are those involved in events associated with the highest number of fatalities. The x-axis estimates the number of fatalities from each event an actor is involved in.
Additionally, actors related to or originating from Israel or Palestine are highlighted in red, while the actors related to or originating from Syria are highlighted in gold. In line with conventional wisdom, Lebanon seems to be caught in the crosshairs of the two large regional conflicts.
As we have seen from the pre- and post-October 2023 seven plots and the streamgraphs above, Syria-related violence has remained dormant since the 2018 offensive. Much of the recent violence is associated with Palestinian groups. It should be monitored if Syrian-related militias and armed groups take advantage of the current situation.
Longer error bars typically indicate higher uncertainty around the estimate. In the case of ACLED data, there are comparatively fewer events for these actors than for those actors with short error bars.
Internally-displaced persons
According to IOM’s Displacement Tracking Matrix, IDPs in Lebanon are located in the largest cities, and the belt between Tyre and Sidon near the southern border. This is, unfortunately, very close to the bulk of the current conflict. These areas are primarily experiencing explosions and remote violence: Al Nabatieh and South Governorates both border Israel and have experienced numerous artillery attacks and drone strikes:
Breakdown of post Oct 7 2023 Explosions and Remote violence, accledata.com
governorate
events
%events
fatalities
%fatalities
Al Nabatieh
5159
66
473
69
South
2567
33
171
25
Baalbek-Hermel
55
1
18
3
Mount Lebanon
4
0
17
2
Bekaa
15
0
11
2
Akkar
2
0
0
0
North
1
0
0
0
The carrying capacities of towns and cities in Southern Lebanon need to be more closely examined. Infrastructure and housing stock assessments are recommended for these areas to evaluate how ready they are to deal with additional displacement and identify priorities for recovery and reconstruction.
Macroeconomics
The plots below show various macroeconomic indicators for Lebanon and its neighbouring countries. Values have all been rescaled between 0 and 1 to aid in comparison.
Lebanon and its neighbours are under tremendous economic pressure. The GDP per capita of Lebanon, Palestine and Syria (and nearly Jordan) are all at 10-year lows. Whereas the Consumer Price Index, in all the countries which reported it, is at a 10-year high.
2020 (the year of the Beirut port explosion) seems to have been an economically significant year for Lebanon. However, even prior to the explosion, the Lebanese government defaulted on external debt for the first time in its history. This was also the high watermark for debt servicing in Lebanon. In many cases, governments are saddled with debt servicing that takes up a disproportionate amount of national budgets. But in Lebanon, the fall in debt servicing is likely due to its default as well as various actors and institutions no longer willing to extend credit.
Only the GDP per capita of Israel and Iran have increased in line with consumer prices.
The plots below show the mean prices of major food and non-food commodities in Lebanon, as collected by WFP market surveys. Immediately, it is apparent that all commodities experienced massive price increases between 2020 and 2021, before peaking in 2022 and then easing. Inflation in 2021 was 155% and 171% in 2022.
The massive cratering of prices in 2023 was because the Lebanese pound’s value fell by 98% against the US Dollar between January 2023 and March 2024. According to Banque du Liban, multiple exchange rates persist. The European Bank of Reconstruction and Development (EBRD) wrote in its 2023-2024 transition report that whilst the then official exchange rate was 15,000 LBP to the USD, the black-market rate was LBP 85,000 to the USD.
For a better view of the currency devaluation and its effect on local prices, the charts below plot USD prices against LBP ones for a single, highly-monitored commodity with many observations – petrol. Petrol peaked at almost USD 30/litre.
No Lebanese government, in recent history, has had the popular mandate or the political will to implement the sorely-needed structural economic reforms.
“As long as the economy is contracting and crisis conditions persist, living standards are set for further erosion, poverty will continue to spiral,” said Jean-Christophe Carret, World Bank Middle East Country Director. “Delays in the implementation of a comprehensive reform and recovery plan will only further compound human and social capital losses and render the recovery longer and more costly.”
The last period with a contracting economy and high inflation was during the Lebanese civil war, as can be seen from the IMF chart below. Please also find some lessons learnt from the civil war, drafted by the European Union Institute of Security Studies.
Protests
In this section, we explore the concerns of protesters in Lebanon. Below is a network graph of event descriptions of protests in Lebanon since 2016. Network graphs shows the connections between various observations (in this case, protest descriptors from Lebanon) and are commonly used to visualise social networks.
The links between each of the words indicate the strength of the relationship (transparency) and the number of times this word pair has occurred (thickness). Only the most common word pairs with correlations above 0.2 are included (for legibility).
Major protests topics include: political instability and dissatisfaction with the government, economic woes and the subsequent neglect of public infrastructure, the Israel-Palestinian conflict, legal and illegal detainees, and the port of Beirut explosion.
Protests in Lebanon have largely revolved around the severe economic and political instability which has plagued the country. We also note few descriptors related to sectarian violence (i.e Islam, Muslim, Sunni, Shi’ite, Christian), indicating that none of the various political and communal militias and groups are currently agitating (at a national level) for separatism, though we do see the words factions and Syrians mentioned in the orbit of Palestinian. Inflammatory rhetoric and discriminatory practices against Syrian and Palestinian refugees (especially in response to economic or political woes) should be monitored.
Forecasts
Below are the three-, six- and twelve-month aggregate forecasts for Lebanon and its neighbouring countries. Higher values, and darker colours, indicate higher levels of conflict.
The Risk Anticipation Hub’s (RAH) conflict forecast aggregate has factored in ACLED, UCDP, VIEWS and CFB forecasts to create a weighted average. This was done to improve risk anticipation by means of predictive analytics that make use of machine learning. For best results, these aggregate forecasts should always be supplemented with qualitative assessments.
The RAH predicts a relatively high level of violence in Lebanon, but still lower than in Israel, Palestine and Syria. These forecasts also expect conflict to lessen within 12 months. However, these forecasts were also performed prior to the 2024 Lebanon Pager Explosions. Recent events will only be included in next month’s forecasts. All figures have been normalised between 0 and 1 to aid in comparability.
When viewing the individual three-month forecasts below, the elevated risk of Explosions and Remote Violence in Lebanon is of note. This aligns with what we have observed in earlier plots at the border with Israel. Explosive remnants of war (ERW) expertise will also be sorely needed.
It is currently read on these forecasts that if the conflict with Israel expands beyond being primarily Explosions and Remote Violence, for instance, a ground invasion, we will need to redo these forecasts. The current consensus for these forecasts is de-escalation within 12 months.
Source Code
---title: "Exploratory data analysis of Lebanon conflict trends"author: "Sean Ng, Risk Anticipation Hub"date: "19 September 2024"toc: truetoc-location: lefttoc-depth: 4format: html: page-layout: full code-tools: true self-contained: true---```{r}``````{css, echo=FALSE}#TOC::before { content: ""; display: block; height: 100px; margin: 1em 10px 10px 10px; background-image: url("./plots/UNDP-Logo-Blue-Large-Transparent.png"); background-size: contain; background-position: center center; background-repeat: no-repeat;}``````{r setup, include=FALSE}knitr::opts_chunk$set(echo = FALSE, warning = FALSE, message = FALSE, fig.width = 10.5)library(tidyverse)library(here)library(lubridate)library(patchwork)library(scales)library(sf)library(broom)library(treemapify)library(kableExtra) library(ggstream)library(ggrepel)library(ggcorrplot)library(tidytext)library(ggtext)library(widyr)library(ggraph)library(janitor)`%out%` <- Negate(`%in%`)options(scipen = 100)theme_set(theme_light())range_wna <- function(x){(x-min(x, na.rm = TRUE))/(max(x, na.rm = TRUE)-min(x, na.rm = TRUE))}``````{r data, message=FALSE, warning=FALSE}lbn_idp <- readxl::read_excel(here("data", "Lebanon - IDP Tracking Dataset - ROUND 45 - 05-09-2024.xlsx")) |> clean_names() |> naniar::replace_with_na(list( returned_from_district = "NULL", returned_from_governorate = "NULL" )) |> rename(idps = id_ps, households = h_hs, adm1_pcode = governorate_pcode, adm2_pcode = district_pcode, adm3_pcode = cadaster_pcode)lebanon <- readRDS(here("data", "lebanon.rds"))forecasts <- read_csv(here("data", "CRD_ConflictForecasts_Admin0_extract.csv")) |> clean_names() |> rename(country = rah_adm0_name, iso = rah_adm0_iso_abbr) |> rename(indicator = cf_indicator_name, value = cf_indicator_value)world_shape <- st_read(here("data", "world-administrative-boundaries", "world-administrative-boundaries.shp"), quiet = TRUE)actor_codes_acled <- tribble( ~actor_code, ~description, 1, "State Forces", 2, "Rebel Groups", 3, "Political Militias", 4, "Identity Militias", 5, "Rioters", 6, "Protesters", 7, "Civilians", 8, "Other Forces")lebanon_actors <- rbind( lebanon |> select(actor = actor1, actor_code = inter1, event_id_cnty), lebanon |> select(actor = actor2, actor_code = inter2, event_id_cnty)) |> filter(!is.na(actor)) |> left_join(lebanon |> select(event_id_cnty, interaction, event_date, country, fatalities, sub_event_type, event_type), by = c("event_id_cnty"), relationship = "many-to-many") |> mutate(event_date = as.Date(event_date, "%d %B %Y"), year = year(event_date), actor_code = as.double(actor_code)) |> left_join(actor_codes_acled |> rename(actor_description = description), by = "actor_code", relationship = "many-to-many") lbn_adm3 <- st_read(here("data", "lbn_adm_cdr_20200810", "lbn_admbnda_adm3_cdr_20200810.shp"), quiet = TRUE) |> janitor::clean_names()lbn_wdi <- read_csv(here("data", "wdi_lebanon_neighbours_extract.csv")) |> clean_names() |> pivot_longer(cols = x2012_yr2012:x2023_yr2023, names_to = "year", values_to = "value") |> mutate(year = str_sub(year, start = 2L, end = 5L)) |> filter(!is.na(country_name) & !str_detect(country_name, "Data|Updated")) |> mutate( country_name = case_when(country_name == "Iran, Islamic Rep." ~ "Iran", country_name == "West Bank and Gaza" ~ "Palestine", country_name == "Syrian Arab Republic" ~ "Syria", TRUE ~ country_name) ) |> rename(country = country_name, indicator = series_name)lbn_food <- read_csv(here("data", "wfp_food_prices_lbn.csv")) |> filter(date != "#date") |> mutate(date = ymd(date))```## Introduction This document is a primer on recent conflict and macroeconomic trends in Lebanon, making use of the [Armed Conflict Location and Event Data (ACLED)](https://acleddata.com/). It seeks to provide an overview of political violence in Lebanon and is intended to be read together with other supporting documents (e.g. on demographics, civil society) when scenario planning for Lebanon. ACLED's data collection in Lebanon began on 1 January 2016. This report contains data up to 13 September 2024. The most recent violence -- the 2024 Lebanon pager explosions -- has yet to be reflected in the ACLED dataset. UCDP might have more years of data (though fewer recorded events): that dataset will be evaluated later; there is also a comparison of ACLED and UCDP [here](https://risk-anticipation-hub.github.io/conflict-trends-asia-pacific/acled_ucdp.html). The gif below shows a month-by-month progression of political conflict and violence in Lebanon, Israel, Palestine, Jordan and Syria from January 2023 to the present day. For at least the past two years, Lebanon seems far more influenced by the conflict in Palestine and Israel than the conflict in Syria -- there is hardly any cross-border violence and Lebanon largely borders Assad-held areas, though there are many Syrian conflict actors operating within Lebanon. However, the southern border of Lebanon with Israel has become a conflict hotspot, in the aftermath of October 7 2023. Here’s a brief review of the political conflict and violence recorded by ACLED.<br>[](https://github.com/risk-anticipation-hub/conflict-trends-asia-pacific/raw/main/plots/lebanon_event_types_grey_months.gif)<br><br>### References for this report* ACLED, (2019). Armed Conflict Location & Event Data Project (ACLED) Codebook. https://www.acleddata.com/wp-content/uploads/dlm_uploads/2017/10/ACLED_Codebook_2019FINAL_pbl.pdf* ACLED, (2024). Armed Conflict Location & Event Data for Lebanon, Syria, Israel, Palestine & Jordan (2016-01-01 to 2024-09-13). https://acleddata.com* Raleigh, C., Kishi, R. & Linke, A. Political instability patterns are obscured by conflict dataset scope conditions, sources, and coding choices. Humanit Soc Sci Commun 10,74 (2023). https://doi.org/10.1057/s41599-023-01559-4* Runfola, D. et al. (2020) geoBoundaries: A global database of political administrative boundaries. PLoS ONE 15(4): e0231866. https://doi.org/10.1371/journal.pone.0231866* Silge J, Robinson D (2016). tidytext: Text Mining and Analysis Using Tidy Data Principles in R. JOSS, 1(3). doi: 10.21105/joss.00037, http://dx.doi.org/10.21105/joss.00037* World Food Programme (2024). Global food prices. Extracted from https://data.humdata.org/m/dataset/global-wfp-food-prices? on 22 September 2024. * World Food Programme (2019). World administrative boundaries -- countries and territories. Extracted from https://public.opendatasoft.com/explore/dataset/world-administrative-boundaries/information/ on 11 June 2024. <br><br><br>## Event types and fatalitiesThe charts below are streamgraphs, where values over time—in the case below, quarterly conflict events between 2016 and 2024—are represented by the area. Though negative values are shown, the Y-axis values are absolute; however, using a streamgraph, as opposed to an area graph, makes spikes in violence (from elections, for instance) much more visible.From the chart below, sorted in order of number of **events** from political incidents per quarter, it seems that Lebanon is stuck in Israel and Palestine’s orbit, with each experiencing an upswing in violence in 2023, before the 7 October attacks. Prior to this, Lebanon had been in a period of stabilisation since 2019 and the overthrow of their then government. However, the current flavour of violence in Lebanon is very different from the October 17 revolution in 2019, looking more like a country at war.<br>```{r fig.height=6.5}lebanon |> mutate(quarter = floor_date(event_date, unit = "quarter")) |> group_by(country, event_type, quarter) |> summarise(events = n_distinct(event_id_cnty), .groups = "drop") |> mutate(country = fct_relevel(country, c("Syria", "Palestine", "Lebanon", "Iran", "Israel", "Jordan"))) |> ggplot(aes(x = quarter, y = events, fill = event_type)) + ggstream::geom_stream(aes(fill = event_type)) + geom_vline(aes(xintercept=as.numeric(as.Date(dmy("07/10/2023")))), linetype=2, colour="black", alpha = .4, size = .4) + scale_fill_manual(values = c( "Battles" = "#9b2226", "Violence against civilians" = "#bb3e03", "Explosions/Remote violence" = "#ee9b00", "Protests" = "#94d2bd", "Strategic developments" = "#e9d8a6", "Riots" = "#005f73" )) + facet_wrap(~ country, scales = "free_y", nrow = 2) + labs(fill = "", x = "") + theme(legend.position = "top", legend.key.width = unit(.3, "cm"), legend.key.height = unit(.3, "cm"), legend.text = element_text(size = 5), axis.text.y = element_text(size = 4), axis.text.x = element_text(size = 4, angle = 30, hjust = 1, vjust = 1), strip.text = element_text(size = 7), strip.background = element_rect(fill = "black"), plot.title = element_text(size = 13), plot.subtitle = element_text(size = 11), plot.caption = element_text(hjust = .5)) + guides(fill = guide_legend(nrow = 1)) + labs(title = "Number of political incidents by event type over time", subtitle = "Data from 2016-01-01 to 2024-09-13, black dotted line is 2023-10-07", y = "Events by quarter", caption = "Data source: Armed Conflict Location & Event Data Project (ACLED); acleddata.com")```<br>The streamgraphs below break down **fatalities** by event type. Violence in Syria has plateaued since 2018, though Syrian-linked actors are still present and active in Lebanon. In terms of fatalities from political incidents, Lebanon has been relatively quiet since the 2017 Hezbollah-Syrian Arab Army offensive against ISIL. Note that despite toppling their government in 2019, there was barely an uptick in conflict fatalities despite a large number of riots and protests.Since 7 October 2023, Iran and Jordan have seen less pressure on their governments. The Iranian government has been under tremendous pressure, fending off mass protests and civil disobedience movements every year.<br>```{r fig.height= 6.5}lebanon |> filter(country != "Jordan") |> mutate(quarter = floor_date(event_date, unit = "quarter")) |> group_by(country, event_type, quarter) |> summarise(fatalities = sum(fatalities), .groups = "drop") |> mutate(country = fct_relevel(country, c("Syria", "Palestine", "Lebanon", "Iran", "Israel", "Jordan"))) |> ggplot(aes(x = quarter, y = fatalities, fill = event_type)) + ggstream::geom_stream(aes(fill = event_type)) + geom_vline(aes(xintercept=as.numeric(as.Date(dmy("07/10/2023")))), linetype=2, colour="black", alpha = .4, size = .4) + scale_fill_manual(values = c( "Battles" = "#9b2226", "Violence against civilians" = "#bb3e03", "Explosions/Remote violence" = "#ee9b00", "Protests" = "#94d2bd", "Strategic developments" = "#e9d8a6", "Riots" = "#005f73" )) + facet_wrap(~ country, scales = "free_y", nrow = 2) + labs(fill = "", x = "") + theme(legend.position = "top", legend.key.width = unit(.3, "cm"), legend.key.height = unit(.3, "cm"), legend.text = element_text(size = 5), axis.text.y = element_text(size = 4), axis.text.x = element_text(size = 4, angle = 30, hjust = 1, vjust = 1), strip.text = element_text(size = 7), strip.background = element_rect(fill = "black"), plot.title = element_text(size = 13), plot.subtitle = element_text(size = 11), plot.caption = element_text(hjust = .5)) + guides(fill = guide_legend(nrow = 1)) + labs(title = "Number of political incident fatalities by event type over time", subtitle = "Data from 2016-01-01 to 2024-09-13, black dotted line is 2023-10-07", y = "Fatalities by quarter", caption = "Data source: Armed Conflict Location & Event Data Project (ACLED); acleddata.com")```<br>There was an escalation in tensions between Lebanon and Israel in 2023, before the October 7 attacks. But the pattern of violence in Lebanon has profoundly changed, especially when compared to before October 7, 2023.As the plot below shows, Lebanon had previously been more widely plagued by Syrian-linked militias. Still, as mentioned, it seems to be much more heavily involved in the Israel-Palestine conflict.<br>```{r}lebanese_cities <-tribble(~x, ~y, ~name,35.5018, 33.8938, "Beirut", 35.8362, 34.4346, "Tripoli", 35.2038, 33.2705, "Tyre", 35.3734475, 33.5500668, "Sidon", ) |>st_as_sf(coords =c("x", "y"), crs =4326)lebanon |>filter(country =="Lebanon") |>mutate(oct7 =ifelse(event_date <"2023-10-07", "pre-oct7", "post-oct7"), oct7 =fct_relevel(oct7, c("pre-oct7", "post-oct7"))) |>ggplot() +geom_sf(data = world_shape |>filter(str_detect(name, "Lebanon")), size =2, colour ="goldenrod2", fill ="grey90") +geom_sf_text(data = lebanese_cities, aes(geometry = geometry, label = name), size =3, alpha = .8) +geom_point(aes(x = longitude, y = latitude, colour = event_type, size = fatalities), alpha = .3) +scale_colour_manual(values =c("Battles"="#9b2226","Violence against civilians"="#bb3e03","Explosions/Remote violence"="#ee9b00","Protests"="#94d2bd","Strategic developments"="#e9d8a6","Riots"="#005f73" )) +facet_wrap(~oct7) +scale_size_continuous(range =c(.1, 6), breaks =c(0, 1, 10, 30, 50)) +guides(colour =guide_legend(override.aes =list(alpha =1, size =1)), size =guide_legend(override.aes =list(alpha =1, colour ="grey"))) +theme(plot.background =element_rect(fill ="grey99", colour ="grey99"), rect =element_rect(fill =NA, colour =NA), legend.title =element_text(face ="bold"),legend.box.background =element_blank(),legend.key =element_rect(colour =NA, fill =NA), strip.background =element_rect(fill ="black"), plot.caption =element_text(hjust =0.5), axis.text.x =element_blank(),axis.text.y =element_blank()) +labs(title ="Political violence in Lebanon prior to and after October 7 2023", colour ="Event type", size ="Fatalities", x ="", y ="", caption ="Data source: Armed Conflict Location & Event Data Project (ACLED); acleddata.com") +guides(colour =guide_legend(override.aes =list(size =2, alpha =1)))```<br><br><br>## Actors Below is a plot of the “deadliest” actors in Lebanon and amongst its neighbours (sorted in order of their mean annual fatalities). The actors plotted below are those involved in events associated with the highest number of fatalities. The x-axis estimates the number of fatalities from each event an actor is involved in.Additionally, actors related to or originating from Israel or Palestine are highlighted in red, while the actors related to or originating from Syria are highlighted in gold. In line with conventional wisdom, Lebanon seems to be caught in the crosshairs of the two large regional conflicts.As we have seen from the pre- and post-October 2023 seven plots and the streamgraphs above, Syria-related violence has remained dormant since the 2018 offensive. Much of the recent violence is associated with Palestinian groups. It should be monitored if Syrian-related militias and armed groups take advantage of the current situation.<br>```{r fig.height=7.5}fatalities_order <- lebanon |> group_by(country, year) |> summarise(fatalities = sum(fatalities), .groups = "drop") |> group_by(country) |> summarise(fatalities = mean(fatalities)) |> arrange(desc(fatalities)) |> pull(country)lebanon_conf_int <- lebanon_actors |> group_by(country) |> add_count(actor) |> ungroup() |> filter(n > 20) %>% nest(-actor) %>% mutate(model = map(data, ~ t.test(.$fatalities))) |> unnest_legacy(map(model,tidy))lebanon_conf_int %>% left_join(lebanon_actors %>% group_by(actor, actor_description, country) %>% summarise(fatalities = sum(fatalities), .groups = "drop"), by = "actor") %>% mutate(actor = fct_reorder(actor, estimate), country = fct_relevel(country, fatalities_order), actor = str_replace_all(actor, "Forces of ", ""), actor = str_sub(actor, start = 1L, end = 40L), sort = (estimate / sum(estimate)) + (fatalities / sum(fatalities))) %>% mutate(actor = case_when( str_detect(actor, "Hamas|Israel|Palesti|DFLP|Mujahideen Brigades|PIJ|PFLP|Fatah") ~ paste0("<span style='color:#FF0000'>", actor, "</span>"), str_detect(actor, "Syria|HTS|JFS|AAS|Jabhat Fateh") | country == "Syria" ~ paste0("<span style='color:#b8860b'>", actor, "</span>"), str_detect(actor, "Unidentified") & country %in% c("Israel", "Palestine") ~ paste0("<span style='color:#FF0000'>", actor, "</span>"), TRUE ~ actor)) |> arrange(desc(sort)) |> group_by(country) |> slice(1:15) |> ungroup() |> mutate(actor_description = fct_relevel(actor_description, c( "Civilians", "State Forces", "Protesters", "Identity Militias", "Rebel Groups", "Rioters", "Political Militias", "Other Forces"))) |> ggplot(aes(x = estimate, y = reorder_within(actor, estimate, country), colour = actor_description)) + geom_point(aes(size = fatalities)) + geom_errorbarh(aes(xmin = conf.low, xmax = conf.high), height = 0.15) + scale_x_continuous(trans = "log10") + scale_size_continuous(range = c(1, 5)) + scale_colour_manual( values = c( "Civilians" = "#FCFFA4FF", "State Forces" = "#000004FF", "Protesters" = "#FAC127FF", "Identity Militias" = "#9F2A63FF", "Rebel Groups" = "#F57D15FF", "Rioters" = "#65156EFF", "Political Militias" = "#D44842FF", "Other Forces" = "#280B54FF")) + # scale_colour_brewer(palette = "Dark2") + scale_y_reordered() + facet_wrap(~country, scales = "free", ncol = 3) + labs(x = "Estimate: Fatalities per conflict event (log scale)", y = "", title = "Top 10 'deadliest' actors per country in order of fatalities per event, 2016-2024", subtitle = "Only actors involved in >20 conflict events. Size indicates fatalities associated with actor. Red actors are from Israel or Palestine. Gold actors are from Syria.", caption = "Data source: Armed Conflict Location & Event Data Project (ACLED); acleddata.com", colour = "", size = "") + guides(size = "none") + theme(plot.caption = element_text(hjust = 0.5), legend.text = element_text(size = 6), legend.position = "top", axis.text = element_text(size = 7), axis.text.y = element_markdown(), strip.background = element_rect(fill = "black"), plot.subtitle = element_text(size = 8)) + guides(colour = guide_legend(nrow = 1))```<br>Longer error bars typically indicate higher uncertainty around the estimate. In the case of ACLED data, there are comparatively fewer events for these actors than for those actors with short error bars.<br><br><br>## Internally-displaced persons```{r fig.height=6}lbn_idp |> filter(idps > 0) |> mutate(adm3_pcode = as.character(adm3_pcode)) |> right_join( lbn_adm3, by = c("adm3_pcode" = "admin3pcod") ) |> st_as_sf() |> ggplot() + geom_sf(aes(fill = idps)) + geom_sf_text(data = lebanese_cities, aes(geometry = geometry, label = name), size = 3, alpha = .8) + scale_fill_viridis(direction = -1, label = comma, trans = "log10") + labs(title = "IDPs in Lebanon 2024-09-05", x = "", y = "", fill = "IDPs") + theme(legend.position = "left", axis.text.x = element_blank(), axis.text.y = element_blank()) + lebanon |> filter(country == "Lebanon") |> filter(event_date >= "2023-10-07") |> ggplot() + geom_sf(data = lbn_adm3, size = 2, colour = "grey", fill = "grey90") + geom_sf_text(data = lebanese_cities, aes(geometry = geometry, label = name), size = 3, alpha = .8) + geom_point(aes(x = longitude, y = latitude, colour = event_type, size = fatalities), alpha = .3) + scale_colour_manual(values = c( "Battles" = "#9b2226", "Violence against civilians" = "#bb3e03", "Explosions/Remote violence" = "#ee9b00", "Protests" = "#94d2bd", "Strategic developments" = "#e9d8a6", "Riots" = "#005f73" )) + scale_size_continuous(range = c(.1, 4), breaks = c(0, 1, 5, 10, 20)) + guides(colour = guide_legend(override.aes = list(alpha = 1, size = 1)), size = guide_legend(override.aes = list(alpha = 1, colour = "grey"))) + theme(plot.background = element_rect(fill = "grey99", colour = "grey99"), rect = element_rect(fill = NA, colour = NA), legend.title = element_text(face = "bold"), legend.box.background = element_blank(), legend.key = element_rect(colour = NA, fill = NA), strip.background = element_rect(fill = "black"), plot.caption = element_text(hjust = 0.5), axis.text.x = element_blank(), axis.text.y = element_blank()) + labs(title = "Political violence in Lebanon, post-October 7 2023", colour = "Event type", size = "Fatalities", x = "", y = "", caption = "Data source: Armed Conflict Location & Event Data Project (ACLED); acleddata.com") + guides(colour = guide_legend(override.aes = list(size = 2, alpha = 1))) ```<br>According to IOM's Displacement Tracking Matrix, [IDPs in Lebanon](https://dtm.iom.int/datasets/lebanon-idp-tracking-dataset-round-45-05-09-2024) are located in the largest cities, and the belt between Tyre and Sidon near the southern border. This is, unfortunately, very close to the bulk of the current conflict. These areas are primarily experiencing explosions and remote violence: Al Nabatieh and South Governorates both border Israel and have experienced numerous artillery attacks and drone strikes:<br>```{r}lebanon |>filter(country =="Lebanon"& event_date >="2023-10-07") |>filter(event_type =="Explosions/Remote violence") |>group_by(admin1) |>summarise(events =n_distinct(event_id_cnty), fatalities =sum(fatalities)) |>mutate(pc_events =round(events /sum(events) *100),pc_fatalities =round(fatalities /sum(fatalities) *100)) |>select(governorate = admin1, events, `%events`= pc_events, fatalities, `%fatalities`= pc_fatalities) |>arrange(desc(fatalities)) |>kable(booktabs =TRUE, caption ="Breakdown of post Oct 7 2023 Explosions and Remote violence, accledata.com") |>kable_classic_2("striped", full_width =TRUE) ```<br>The carrying capacities of towns and cities in Southern Lebanon need to be more closely examined. Infrastructure and housing stock assessments are recommended for these areas to evaluate how ready they are to deal with additional displacement and identify priorities for recovery and reconstruction.<br><br><br>## Macroeconomics The plots below show various macroeconomic indicators for Lebanon and its neighbouring countries. Values have all been rescaled between 0 and 1 to aid in comparison. Lebanon and its neighbours are under tremendous economic pressure. The GDP per capita of Lebanon, Palestine and Syria (and nearly Jordan) are all at 10-year lows. Whereas the Consumer Price Index, in all the countries which reported it, is at a 10-year high. 2020 (the year of the Beirut port explosion) seems to have been an economically significant year for Lebanon. However, even prior to the explosion, the Lebanese government defaulted on external debt for the first time in its history. This was also the high watermark for debt servicing in Lebanon. In many cases, governments are saddled with debt servicing that takes up a disproportionate amount of national budgets. But in Lebanon, the fall in debt servicing is likely due to its default as well as various actors and institutions no longer willing to extend credit. Only the GDP per capita of Israel and Iran have increased in line with consumer prices. <br>```{r fig.height=6.5}lbn_wdi |> filter(!str_detect(indicator, "Official exchange rate")) %>% mutate_at(vars(value, year), ~ as.numeric(.)) |> group_by(indicator, country) |> mutate(range = range_wna(value)) |> ggplot(aes(x = year, y = range)) + geom_line(aes(colour = indicator), linewidth = 1, alpha = .7) + scale_x_continuous(breaks = seq(2013, 2023, 2)) + scale_colour_manual(values = c("#fde725ff", "#7ad151ff", "#2a788eff", "#440154ff")) + facet_wrap(~ country) + theme(legend.position = "top", strip.background = element_rect(fill = "black"), legend.text = element_text(size = 8), plot.caption = element_text(hjust = .5)) + labs(colour = "", y = "Normalised value", x = "", title = "Macronomic indicators -- Lebanon and its neighbours", caption = "Data source: World Development Indicators, World Bank")```<br>The plots below show the mean prices of major food and non-food commodities in Lebanon, as collected by WFP market surveys. Immediately, it is apparent that all commodities experienced massive price increases between 2020 and 2021, before peaking in 2022 and then easing. Inflation in 2021 was 155% and 171% in 2022.The massive cratering of prices in 2023 was because the Lebanese pound's value fell by 98% against the US Dollar between January 2023 and March 2024. According to Banque du Liban, multiple exchange rates persist. The European Bank of Reconstruction and Development (EBRD) wrote in its [2023-2024 transition report](https://www.ebrd.com/publications/transition-report-202324-lebanon) that whilst the then official exchange rate was 15,000 LBP to the USD, the black-market rate was LBP 85,000 to the USD. <br>```{r fig.height=6}lbn_food |> mutate(quantity = parse_number(unit), unit = str_extract(unit, "[A-Za-z]+"), usdprice = as.numeric(usdprice), price = as.numeric(price)) |> filter(pricetype == "Retail") |> mutate(unit_price = usdprice / quantity, category_unit = paste0(category, " ", date)) |> group_by(commodity, category, unit, date) |> summarise(unit_price = mean(unit_price, na.rm = TRUE), .groups = "drop") |> filter(!is.nan(unit_price)) |> group_by(commodity, category, date, unit) |> summarise(unit_price = mean(unit_price), .groups = "drop") |> filter(commodity %in% c("Eggs", "Oil (sunflower)", "Cheese (picon)", "Fuel (diesel)", "Fuel (gas)", "Fuel (petrol-gasoline, 95 octane)", "Beans (white)", "Bread (pita)", "Bulgur (brown)") | str_detect(commodity, "beef|tuna|sardine")) |> ggplot(aes(x = date, y = unit_price)) + geom_line(aes(colour = category), linewidth = .7, alpha = .9) + geom_vline(aes(xintercept=as.numeric(as.Date(dmy("04/10/2020")))), linetype=2, colour="salmon", alpha = .6, size = .4) + facet_wrap(~ commodity, scales = "free_y") + scale_x_date(date_breaks = "2 years", date_labels = "%Y") + labs(y = "USD price per unit (g, L, pc)", x = "", title = "Mean commodity prices in Lebanon, from WFP", subtitle = "Pink dotted line marks 2020 Beirut explosion", colour = "", caption = "Data source: WFP Global Food Prices.") + theme(axis.text.x = element_text(angle = 30, hjust = 1), strip.background = element_rect(fill = "black"), legend.position = "top", plot.caption = element_text(hjust = .5)) + guides(colour = guide_legend(override.aes = list(linewidth = 1.5), nrow = 1))```<br> For a better view of the currency devaluation and its effect on local prices, the charts below plot USD prices against LBP ones for a single, highly-monitored commodity with many observations -- petrol. Petrol peaked at almost USD 30/litre. <br>```{r fig.height=6}lbn_food |> mutate(quantity = parse_number(unit), unit = str_extract(unit, "[A-Za-z]+"), year = year(date), usdprice = as.numeric(usdprice), lbnprice = as.numeric(price)) |> select(-price) |> filter(pricetype == "Retail") |> pivot_longer(cols = c(usdprice, lbnprice), names_to = "currency2", values_to = "price") |> mutate(currency2 = str_to_upper(str_sub(currency2, 1, 3))) |> mutate(unit_price = price / quantity) |> filter(commodity == "Fuel (petrol-gasoline, 95 octane)") |> ggplot(aes(x = date, y = unit_price)) + geom_line() + facet_wrap(~ currency2, scales = "free_y") + scale_x_date(date_breaks = "1 year", date_label = "%Y") + scale_y_continuous(labels = comma) + labs(y = "Price per litre", x = "", title = "Mean price per litre of fuel (petrol-gasoline, 95 octane)", caption = "Data source: WFP Global Food Prices.") + theme(strip.background = element_rect(fill = "black"), plot.caption = element_text(hjust = .5))```<br>No Lebanese government, in recent history, has had the popular mandate or the political will to implement the sorely-needed structural economic reforms. “As long as the economy is contracting and crisis conditions persist, living standards are set for further erosion, poverty will continue to spiral,” [said](https://www.worldbank.org/en/news/press-release/2023/05/16/lebanon-normalization-of-crisis-is-no-road-to-stabilization#:~:text=The%20currency%20lost%20more%20than,food%20and%20non%2Dalcoholic%20beverages.) Jean-Christophe Carret, World Bank Middle East Country Director. “Delays in the implementation of a comprehensive reform and recovery plan will only further compound human and social capital losses and render the recovery longer and more costly." The last period with a contracting economy and high inflation was during the Lebanese civil war, as can be seen from the [IMF](https://www.imf.org/en/Countries/LBN#) chart below. Please also find some [lessons learnt from the civil war](https://www.files.ethz.ch/isn/189966/Alert_21_Lebanon_civil_war.pdf), drafted by the European Union Institute of Security Studies. <img src="./plots/imf_lbn_gdp_inflation.png" alt="" width="600"/><br><br><br>## ProtestsIn this section, we explore the concerns of protesters in Lebanon. Below is a network graph of event descriptions of protests in Lebanon since 2016. Network graphs shows the connections between various observations (in this case, protest descriptors from Lebanon) and are commonly used to visualise social networks. The links between each of the words indicate the strength of the relationship (transparency) and the number of times this word pair has occurred (thickness). Only the most common word pairs with correlations above 0.2 are included (for legibility). Major protests topics include: political instability and dissatisfaction with the government, economic woes and the subsequent neglect of public infrastructure, the Israel-Palestinian conflict, legal and illegal detainees, and the port of Beirut explosion. Protests in Lebanon have largely revolved around the severe economic and political instability which has plagued the country. We also note few descriptors related to sectarian violence (i.e Islam, Muslim, Sunni, Shi'ite, Christian), indicating that none of the various political and communal militias and groups are currently agitating (at a national level) for separatism, though we do see the words `factions` and `Syrians` mentioned in the orbit of `Palestinian`. Inflammatory rhetoric and discriminatory practices against Syrian and Palestinian refugees (especially in response to economic or political woes) should be monitored. <br>```{r eval=FALSE}set.seed(234)lebanon_network_graph <- lebanon_protests |> distinct(event_id_cnty, word) |> add_count(word) |> filter(n >= 75) |> pairwise_cor(word, event_id_cnty, sort = TRUE) |> filter(correlation >= .15) |> left_join( lebanon_protests |> distinct(event_id_cnty, word) |> add_count(word) |> filter(n >= 75) |> pairwise_count(word, event_id_cnty, sort = TRUE), by = c("item1", "item2") ) |> igraph::graph_from_data_frame() %>% ggraph(layout = "fr") + geom_edge_link(aes(alpha = correlation, edge_width = n), colour = "lightskyblue2", check_overlap = TRUE) + scale_edge_width_continuous(range = c(.1, 2.5), trans = "log10") + scale_alpha_continuous(range = c(0.01, 0.08)) + geom_node_point(colour = "lightskyblue2", alpha = 0.2, size = .5) + geom_node_text(aes(label = ifelse(name %in% c("port", "economic", "political", "palestinian", "detainees", "outages", "neglect"), str_to_title(name), "")), size = 5, alpha = .7, colour = "goldenrod2") + geom_node_text(aes(label = name), size = 1.8) + theme(legend.position = "none", plot.caption = element_text(hjust = .5)) + labs(title = "Network graph of Lebanon protest descriptions", subtitle = "Line thickness indicates number of events involving those words, line transparency indicates the correlation between words. Selected words highlighted.", caption = "Source: www.acleddata.com")ggsave(here("plots", "lebanon_network_graph.png"), width = 42.0, height = 29.7, units = "cm", dpi = 300)```[](https://github.com/risk-anticipation-hub/conflict-trends-asia-pacific/raw/main/plots/lebanon_network_graph.png)<br><br><br>## Forecasts Below are the three-, six- and twelve-month aggregate forecasts for Lebanon and its neighbouring countries. Higher values, and darker colours, indicate higher levels of conflict. The Risk Anticipation Hub's (RAH) conflict forecast aggregate has factored in ACLED, UCDP, VIEWS and CFB forecasts to create a weighted average. This was done to improve risk anticipation by means of predictive analytics that make use of machine learning. For best results, these aggregate forecasts should always be supplemented with qualitative assessments. The RAH predicts a relatively high level of violence in Lebanon, but still lower than in Israel, Palestine and Syria. These forecasts also expect conflict to lessen within 12 months. However, these forecasts were also performed prior to the 2024 Lebanon Pager Explosions. Recent events will only be included in next month's forecasts. All figures have been normalised between 0 and 1 to aid in comparability. <br>```{r}forecasts |>filter(str_detect(indicator, "Aggreg") &!str_detect(indicator, "Rank")) |>mutate(indicator =str_remove(indicator, "AggregMetric-"), indicator =str_replace(indicator, "m", " months")) |>arrange(indicator) |>filter(iso !="IRN") |>group_by(indicator) |>mutate(range =range_wna(value)) |>ungroup() |>left_join(world_shape |>filter(iso3 %in%c("ISR", "JOR", "LBN", "PSE", "SYR")), by =c("iso"="iso3"), relationship ="many-to-many") |>st_as_sf() |>ggplot() +geom_sf(aes(fill = range)) +facet_wrap(~factor(indicator, levels =c("3 months", "6 months", "12 months")), nrow =1) +scale_fill_viridis_c(option ="magma", direction =-1) +theme(strip.background =element_rect(fill ="black"), axis.text.x =element_blank(), axis.text.y =element_blank(), plot.caption =element_text(hjust = .5, size =4)) +labs(fill ="Normalised\nvalue", title ="Conflict forecasts -- RAH Aggregates", subtitle ="From September 2024", caption ="The designations employed and the presentation of the material on this map do not imply the expression of any opinion whatsoever on the part of the Secretariat of the United Nations concerning the legal status\nof any country, territory, city or area or of its authorities, or concerning the delimitation of its frontiers or boundaries. This map is provided without any warranty of any kind whatsoever, either express or implied.")```<br>When viewing the individual three-month forecasts below, the elevated risk of Explosions and Remote Violence in Lebanon is of note. This aligns with what we have observed in earlier plots at the border with Israel. Explosive remnants of war (ERW) expertise will also be sorely needed.It is currently read on these forecasts that if the conflict with Israel expands beyond being primarily Explosions and Remote Violence, for instance, a ground invasion, we will need to redo these forecasts. The current consensus for these forecasts is de-escalation within 12 months.<br>```{r fig.height=6}forecasts |> filter( indicator %in% c( "ACLED-BASE-3m", "CAST-Total_events-3m", "CAST-ERV_events-3m", "CFB-AnyViolence-3m", "CFB-ViolenceIntensity-3m", "ConfInt-BASE-3m", "UCDP-BASE-3m", "VIEWS-Main_fatalities-3m" ) ) |> filter(iso != "IRN") |> select(iso, country, indicator, value) |> group_by(indicator) |> mutate(range = range_wna(value), indicator = str_replace(indicator, "ConfInt", "ConflictIntensity")) |> ungroup() |> left_join(world_shape |> filter(iso3 %in% c("ISR", "JOR", "LBN", "PSE", "SYR")), by = c("iso" = "iso3"), relationship = "many-to-many") |> st_as_sf() |> ggplot() + geom_sf(aes(fill = range)) + facet_wrap(~indicator, nrow = 2) + scale_fill_viridis_c(option = "magma", direction = -1) + theme(strip.background = element_rect(fill = "black"), axis.text.x = element_blank(), axis.text.y = element_blank(), plot.caption = element_text(hjust = .5, size = 4)) + labs(title = "Conflict forecasts -- 3 months from 2024-09, Lebanon and its neighbours", fill = "Normalised\nValue", caption = "The designations employed and the presentation of the material on this map do not imply the expression of any opinion whatsoever on the part of the Secretariat of the United Nations concerning the legal status\nof any country, territory, city or area or of its authorities, or concerning the delimitation of its frontiers or boundaries. This map is provided without any warranty of any kind whatsoever, either express or implied.")``````{r eval = FALSE}forecasts |> filter(str_detect(indicator, "6m") & indicator %out% c("CAST-VaC_events-6m", "CAST-Battles_events-6m", "AggregMetric-6m", "AggregRank-6m")) |> filter(iso != "IRN") |> select(iso, country, indicator, value) |> group_by(indicator) |> mutate(range = range_wna(value), indicator = str_replace(indicator, "ConfInt", "ConflictIntensity")) |> ungroup() |> left_join(world_shape |> filter(iso3 %in% c("ISR", "JOR", "LBN", "PSE", "SYR")), by = c("iso" = "iso3"), relationship = "many-to-many") |> st_as_sf() |> ggplot() + geom_sf(aes(fill = range)) + facet_wrap(~indicator, nrow = 2) + scale_fill_viridis_c(option = "magma", direction = -1) + theme(strip.background = element_rect(fill = "black")) + labs(fill = "Normalised\nvalue", title = "Conflict forecasts -- 6 months from 2024-09")```<br>